RepRapでChecksumの計算アルゴリズム

http://reprap.org/wiki/G-code#.2A:_Checksum

擬似コード

int cs = 0;
for(i = 0; cmd[i] != '*' && cmd[i] != NULL; i++)
   cs = cs ^ cmd[i];
cs &= 0xff;  // Defensive programming...

テストコード

#include <stdio.h>

int main(){
  int cs = 0;
  char *cmd = "N380 G1 X89.979 Y92.963 E317.8971";
  for(int i = 0; cmd[i] != '*' && cmd[i] != NULL; i++)
    cs = cs ^ cmd[i];
  cs &= 0xff;
  printf("checksum: %d\r\n",cs);

  return 0;
}

結果

$./a.out
checksum: 90 #->ok